package br.com.caim.viewcontroller.envio;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.caim.bo.Mensagem;
import br.com.caim.bo.entidade.Conta;
import br.com.caim.bo.entidade.Usuario;
import br.com.caim.email.dao.Persistencia;
import br.com.caim.email.envio.IEnvioEmail;
import br.com.caim.email.envio.impl.EnvioEmail;
import br.com.caim.email.excecoes.negocio.EnvioEmailException;
import br.com.caim.email.excecoes.negocio.NenhumaContaEncontrada;
import br.com.caim.viewcontroller.ActionPadrao;

public class EnvioMensagemAction extends ActionPadrao {
	
	private IEnvioEmail envioEmail;
	private static final String FW_PAGINA_ERRO = "fwTelaErro";
	private static final String FW_PAGINA_EMAIL_ENVIADO = "fwEmailEnviado";
	private static final String FW_PAGINA_ENVIO = "fwTelaEnvioEmail";
	
	public EnvioMensagemAction() {
		envioEmail = new EnvioEmail();
	}
	
	public ActionForward enviarMensagem(ActionMapping mapping, ActionForm genericForm, 
					HttpServletRequest request, HttpServletResponse response) throws AddressException, MessagingException, NenhumaContaEncontrada, EnvioEmailException {
		
		ActionForward fwd = null;
		Usuario user = (Usuario) request.getSession().getAttribute("usuario");
		Persistencia dao = new Persistencia();
		
		EnvioMensagemForm form = (EnvioMensagemForm) genericForm;
		
		if(user == null) {
			fwd = mapping.findForward(FW_PAGINA_ERRO);
		} else {
			System.out.println("FROM: " + request.getSession().getAttribute("from"));
			
			Conta contaFrom = dao.pesquisarContaUsuario(user.getId().toString(), (String) request.getSession().getAttribute("from"));
			
			System.out.println("CONTA_FROM: " + contaFrom.getEnderecoEmail());
			
			Mensagem mensagem = new Mensagem();
			mensagem.setPara(form.getTo());
		    mensagem.setAssunto(form.getAssunto());
		    mensagem.setConteudo(form.getConteudo());
		    
		    if(envioEmail.enviarMensagem(contaFrom, mensagem)) {
		    	return mapping.findForward("fwEmailEnviado");
		    }
		}
		
		return mapping.findForward("erro");
	}
	
	public ActionForward selecionarContaParaEnviarEmail(ActionMapping mapping, ActionForm genericForm, 
			HttpServletRequest request, HttpServletResponse response) {
		ActionForward fwd = null;
		
		String enderecoEmailConta = (String) request.getParameter("enderecoConta");
		
		// Verifica se alguma conta foi selecionada
		// Caso tenha sido selecionada, redireciona para a pagina correta
		if(enderecoEmailConta == null || enderecoEmailConta.equals("")) {
			fwd = mapping.findForward(FW_PAGINA_ERRO);
		} else {
			request.setAttribute("from", enderecoEmailConta);
			fwd = mapping.findForward(FW_PAGINA_ENVIO);
		}
		
		return fwd;
	}
}

